<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<div>

</div>
<script>
    var config = {
        /*
        方式一: 案例为问题1
        使用 return 的方式, 避免多对象时, 修改一个对象的值影响其他对象的值
        xiaohong.data.name的修改不会同时修改xiaoming.data.name
        类似值传递, 返回的是不同地址(分别对应不同对象)
        */
        data(){
            return {
                //返回多例对象
                name: '小明'
            }
        }

        /*
        方式二: 案例为问题2
        直接定义name, 不通过return函数返回,
        xiaohong.data.name的修改会同时修改xiaoming.data.name
        类似引用传递, 返回的是同一个地址
        */
        /*data: {
            name: '小明'
        }*/
    }
    var People = function (config) {
        //这里的data是函数, 需要通过 data() 调用
        this.data = config.data()
    }

    var xiaoming = new People(config)
    var xiaohong = new People(config)
    xiaohong.data.name = '小红'
    console.log(xiaoming.data.name)
    console.log(xiaohong.data.name)
    alert(xiaoming.data.name)
    alert(xiaohong.data.name)
</script>
</body>
</html>